home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / comm / misc / xprz31.lha / XprZmodem / GetSysTime.c < prev    next >
C/C++ Source or Header  |  1993-08-13  |  3KB  |  87 lines

  1. /**********************************************************************
  2.  * Amiga-type replacement for standard Unix time() function.  Can't use
  3.  * Lattice's time() function from within a library because it's not
  4.  * reentrant (has some hidden static vars it sets) and because it wants
  5.  * you to have opened dos.library for some reason, which is supposedly
  6.  * a bad idea inside a library.  Oh, well... this is quite a bit
  7.  * smaller & faster anyway.  B-)
  8.  **********************************************************************/
  9.  
  10. #include "xprzmodem_all.h"
  11.  
  12. /*
  13.  * # seconds between 1-1-70 (Unix time base) and 1-1-78 (Amiga time base).
  14.  * Add this value to the returned seconds count to convert Amiga system time
  15.  * to normal Unix system time.
  16.  */
  17.  
  18. ULONG UnixTimeOffset = 252482400;
  19.  
  20. /**********************************************************
  21.  *      ULONG getsystime(struct timeval *tv)
  22.  *
  23.  *      This function was rewritten using DateStamp() to
  24.  * eliminate the opening and closing of the timer.device
  25.  * that was occurring everytime this function was called.
  26.  * An attempt to save some processing time.   -WMP-
  27.  **********************************************************/
  28. ULONG 
  29. getsystime (struct timeval *tv)
  30. {
  31.   struct DateStamp ds;
  32.   ULONG secs;
  33.  
  34.   DateStamp (&ds);
  35.  
  36.   secs = (ds.ds_Days * 86400) + (ds.ds_Minute * 60)
  37.     + (ds.ds_Tick / TICKS_PER_SECOND);
  38.   if (tv)
  39.     {
  40.       tv->tv_secs = secs;
  41.       tv->tv_micro = 0;        /* Not Used. */
  42.     }
  43.  
  44.   return secs;
  45. }                /* End of ULONG getsystime() */
  46.  
  47. /**********************************************************
  48.  *      ULONG getsystime(struct timeval *tv)
  49.  *
  50.  * This is the old function and is commented out.
  51.  **********************************************************
  52.  *
  53.  * Returns current system time in standard Amiga-style timeval
  54.  * structure, if you pass a pointer to one.  Also returns the
  55.  * seconds part as the return value.  This lets you get just
  56.  * the seconds by calling getsystime(NULL) if that's all you
  57.  * want, or the full timeval struct if you need that.  This
  58.  * is very similar to how the standard time() function is used.
  59.  *
  60.  **********************************************************
  61.  ULONG getsystime(struct timeval *tv)
  62.  {
  63.  struct timerequest tr;
  64.  
  65.  /*
  66.  * timer.device must be working or the system would've died, so let's
  67.  * not bother with error checking.
  68.  *
  69.  
  70.  memset(&tr, 0, sizeof(tr));
  71.  OpenDevice(TIMERNAME, UNIT_VBLANK, (struct IORequest *) &tr, 0L);
  72.  
  73.  tr.tr_node.io_Message.mn_Node.ln_Type = NT_MESSAGE;
  74.  tr.tr_node.io_Command = TR_GETSYSTIME;
  75.  
  76.  DoIO((struct IORequest *) &tr);
  77.  
  78.  if (tv)
  79.  *tv = tr.tr_time;
  80.  
  81.  CloseDevice((struct IORequest *) &tr);
  82.  
  83.  return tr.tr_time.tv_secs;
  84.  }      /* End of ULONG getsystime() */
  85.  
  86. /* End of getsystime.c source */
  87.